package ar.org.tesis.comparticion.conocimientos.dao.hbn;

import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;

import ar.org.tesis.comparticion.conocimientos.dao.SiaEstadoEvolucionWorldDAO;
import ar.org.tesis.comparticion.conocimientos.informacion.beans.SiaEstadoEvolucionWorldBean;

/**
 * @author mpriet
 * 
 */
@SuppressWarnings("serial")
public class SiaEstadoEvolucionWorldDAOHbn extends AbstractDAOHbn implements
		SiaEstadoEvolucionWorldDAO {

	private static final Logger logger = Logger
			.getLogger(SiaEstadoEvolucionWorldDAOHbn.class);

	public SiaEstadoEvolucionWorldDAOHbn() {
		// TODO Auto-generated constructor stub
	}

	public final void guardarSiaEstadoEvolucionWorldBean(
			final SiaEstadoEvolucionWorldBean siaEstadoEvolucionWorldBean) {
		logger.info("inicio insercion de SiaEstadoEvolucionWorld");
		this.saveOrUpdate(siaEstadoEvolucionWorldBean);
		logger.info("finalizo la insercion de SiaEstadoEvolucionWorld");
	}

	@SuppressWarnings({ "unchecked", "rawtypes" })
	public SiaEstadoEvolucionWorldBean buscarSiaEstadoEvolucionWorldBean(
			final String siaName, final String worldName) {
		logger.info("inicio busqueda de SiaEstadoEvolucionWorld");
		
		final String queryStr="from SiaEstadoEvolucionWorldBean where world.name=:worldName and sia.name=:siaName";
		
		 SiaEstadoEvolucionWorldBean siaEstadoEvolucionWorld = getHibernateTemplate().execute(
				new HibernateCallback() {
				public Object doInHibernate(Session session) throws HibernateException {
				Query query =session.createQuery(queryStr);
				query.setString("worldName", worldName);
				query.setString("siaName", siaName);
				List result = query.list();
				if(result==null||result.size()<1)
					return null;
				return result.get(0);
				}});
		 
		logger.info("finalizo la busqueda de SiaEstadoEvolucionWorld");
		return siaEstadoEvolucionWorld;
	}
	
	public Integer buscarSiaEstadoEvolucionWorldBean(
			final Integer idSia, final Integer idWorld) {
		logger.info("inicio busqueda de SiaEstadoEvolucionWorld");
		
		final String queryStr="Select id_estado_evolucion from SIA_ESTADO_EVOLUCION_WORLD where id_sia=:idSia and id_world=:idWorld";
		
		@SuppressWarnings({ "unchecked", "rawtypes" })
		Integer idEstadoEvolucion = getHibernateTemplate().execute(
				new HibernateCallback() {
				public Object doInHibernate(Session session) throws HibernateException {
				SQLQuery query =session.createSQLQuery(queryStr);
				query.addScalar("id_estado_evolucion", Hibernate.INTEGER);
				query.setInteger("idWorld", idWorld);
				query.setInteger("idSia", idSia);
				List result = query.list();
				if(result==null||result.size()<1)
					return null;
				return result.get(0);
				}});
		
		logger.info("finalizo la busqueda de SiaEstadoEvolucionWorld");
		return idEstadoEvolucion;
	}

}
